iT邦幫忙

2019 iT 邦幫忙鐵人賽

DAY 13
0

發現前面有些地方其實可以拆成兩三天慢慢講⋯⋯orz

我怎麼才13天就寫到這裡了呢⋯⋯失、失策啊⋯⋯orz

OK,中介層。

Middleware的檔案都在app/Http/Middleware中,打開可以發現我們一開始從GitHub上clone下來的Laravel Project已經預設了幾個Middleware了,比如登入驗證、CSRF。

要使用Middleware前就跟自訂Artisan指令一樣,要在Kernel.php上註冊,不過Artisan指令是在app/Console/Kernel.php,而Middleware則是在app/Http/Kernel.php

這裡不得不提PHP的namespace,PHP在5.3之後引入namespace的概念,這東東相當於Java的package,可以解決名稱衝突的問題,如果沒有namespace可能就會看到一堆落落長的檔案名了:)

Middleware的功能相當於在用戶請求跟後端間設個閘門,用最常見的身份驗證來舉栗子,有些頁面我們是禁止非會員的使用者看的,這時當訪問頁面的請求進來,Middleware就會去檢查。如果它是已登入的使用者的請求,就顯示頁面給他;如果它不是,我們可能就會將頁面導向登入頁。

生成指令:

php artisan make:middleware Cat

新生成的文件內容只有這樣:

<?php

namespace App\Http\Middleware;

use Closure;

class Cat
{
    /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure  $next
     * @return mixed
     */
    public function handle($request, Closure $next)
    {
        return $next($request);
    }
}

註冊Middleware跟斯斯一樣有三種(?):

全域

放在這裡的是任何請求都會經過的Middleware。

// Kernel.php
protected $middleware = [
    \App\Http\Middleware\CheckForMaintenanceMode::class,
    // 以下略⋯⋯
];

路由

如果是要指派給特定路由使用,可以在這裡設定一個鍵。

protected $routeMiddleware = [
    'auth' => \App\Http\Middleware\Authenticate::class,
    'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
    // 以下略⋯⋯
];

路由要使用時就這樣指派:

Route::get('/Example', ['middleware' => 'auth', function () {
    //
}]);

群組

要多個Middleware同時使用,就可以使用群組的方式。

// Kernel.php
protected $middlewareGroups = [
    'web' => [
        \App\Http\Middleware\EncryptCookies::class,
        // 以下略⋯⋯
    ],

    'api' => [
        'throttle:60,1',
        'bindings',
    ],
];

一樣是指派給路由去使用:

Route::group(['middleware' => ['web']], function () {
    //
});

上一篇
D12 Model, Eloquent, ORM(2)
下一篇
D14 Artisan補充章
系列文
來用Laravel做點什麼吧30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言